package chapter3;

/**
 * @author Hang
 * @date 2022/8/24
 * @project AutumnOffer
 * @description 面试题16
 **/
public class myPow {
    public static void main(String[] args) {
        System.out.println(myPow(2,-3));
    }
    public static double myPow(double x,int n){
        if(x==0) return 0; //0的任何次幂为0
        if(n<0) {//如果为负数，则让x为倒数，n变为正数
            x = 1/x;
            n = -n;
        }
        double res = 1; //初始化为1
        while(n>0){//进行右移，如果为0，则不进行乘法，为1，则进行相乘，每次遍历x平方
            if((n&1)==1){// 1101 & 0001如果为1，表明末位为1，相乘，末位为0，则不乘
                res *= x;
            }
            x *= x; //计算当前层的下一层x的基数，x，x2，x3，x4
            n = n>>1;//右移除去地低位,二进制移位操作
        }
        return res;
    }
}
